<?php

require CAMINHO_SERVIDOR . 'conexao.php';
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of jogoDAO
 *
 * @author Fernando
 */
class jogoDAO {

    private $con;

    function __construct() {
        self::setCon(conectar());
        mysql_query('SET CHARACTER SET utf8');
    }

    public function getCon() {
        return $this->con;
    }

    public function setCon($con) {
        $this->con = $con;
    }

    public function fecharConexao() {
        desconectar(self::getCon());
    }

    function executaQuery($query) {
        return mysql_query($query, self::getCon());
    }

    function executaQueryAll($query) {
        $posts = array();
        $result = mysql_query($query, self::getCon());

        if (mysql_num_rows($result)) {
            while ($post = mysql_fetch_assoc($result)) {
                $posts[] = $post;
            }
        }

        return $posts;
    }

    function executaQueryRow($query) {
        $result = mysql_query($query, self::getCon());
        return mysql_fetch_assoc($result);
    }

    function cadastraJogo($descricao, $id_campeonato, $id_rodada, $id_timeA, $id_timeB, $data, $hora, $local) {
        $query = "INSERT INTO tb_jogos (`data`, hora, id_time_A, id_time_B, descricao, id_campeonato,`local`,id_rodada) 
                     VALUES('" . $data . "','" . $hora . "','" . $id_timeA . "','" .
                $id_timeB . "','" . $descricao . "','" . $id_campeonato . "','" . $local . "','" . $id_rodada . "')";
        $result = self::executaQuery($query);
        return $result;
    }

    function editaJogo($id_jogo, $descricao, $id_campeonato, $id_rodada, $id_timeA, $id_timeB, $data, $hora, $local) {
        $query = "UPDATE tb_jogos SET data='" . $data . "', hora='" . $hora . "', id_time_A='"
                . $id_timeA . "', id_time_B='" . $id_timeB . "', descricao='" . $descricao
                . "', id_campeonato='" . $id_campeonato . "', local='" . $local . "',id_rodada='"
                . $id_rodada . "' WHERE id_jogo=" . $id_jogo . ";";
        //funcoes::debuga($query);
        $result = self::executaQuery($query);
        return $result;
    }

    function getDadosJogo() {
        $query = "SELECT id_jogo, DATE_FORMAT(`data`,'%d/%m/%Y') AS `data`, 
                    DATE_FORMAT(`hora`,'%H:%i') AS `hora`, id_time_A,id_time_B, descricao,id_campeonato,id_rodada, `local`
                    FROM bolao.`tb_jogos` ORDER BY data_cadastro DESC LIMIT 1;";
        $result = self::executaQueryRow($query);
        return $result;
    }

    function gravaJogo($nome, $img) {
        $query = "INSERT INTO tb_jogo (nome, img) VALUES('" . $nome . "', '" . $img . "')";
        $result = self::executaQuery($query);
        return $result;
    }

    function alteraJogo($id, $nome, $img) {
        $query = "UPDATE tb_jogo SET nome = '" . $nome . "', img = '" . $img . "' WHERE id_jogo = " . $id;
        $result = self::executaQuery($query);
        return $result;
    }

    function listaAllJogos() {
        $query = "SELECT id_jogo, nome, img FROM tb_jogo";
        $result = self::executaQueryAll($query);
        return $result;
    }

    function getDadosDataHoraJogo($id_jogo, $comando_hora_atual, $comando_data_atual) {
        $query = "SELECT data, hora, " . $comando_hora_atual . " as hora_atual, " . $comando_data_atual . " as data_atual FROM tb_jogos WHERE id_jogo = " . $id_jogo;
        return self::executaQueryRow($query);
    }

    function getIdAposta($id_jogo, $user_id) {
        $query = "SELECT id_aposta FROM tb_apostas WHERE id_jogo = " . $id_jogo . " AND id_usuario = " . $user_id;
        $result = self::executaQueryRow($query);
        return $result["id_aposta"];
    }

    function gravaAposta($user_id, $id_jogo, $aposta_a, $aposta_b) {
        $query = "INSERT INTO tb_apostas (id_usuario, id_jogo, placar_time_A, placar_time_B) VALUES ('" . $user_id . "', '" . $id_jogo . "', '" . $aposta_a . "', '" . $aposta_b . "')";
        $result = self::executaQuery($query);
        return $result;
    }

    function atualizaAposta($aposta_a, $aposta_b, $aposta) {
        $query = "UPDATE tb_apostas SET placar_time_A = '" . $aposta_a . "', placar_time_B = '" . $aposta_b . "' WHERE id_aposta = " . $aposta;
        $result = self::executaQuery($query);
        return $result;
    }

    function getCountProxJogosByUserByCampeonato($id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada) {
        $query = "SELECT COUNT(j.id_jogo) as total FROM tb_jogos j "
                . "INNER JOIN tb_time ta ON ta.id_time = j.id_time_A "
                . "INNER JOIN tb_time tb ON tb.id_time = j.id_time_B "
                . "INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato "
                . "WHERE j.id_campeonato = " . $id_campeonato . " AND j.id_rodada = " . $id_rodada;
        $result = self::executaQueryRow($query);
        return $result['total'];
    }

    function getJogosDadosApostasByUserByCampeonato($user_id, $id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada, $paginar = false, $inicio = 0, $registros = 10) {
        $query = "SELECT j.id_jogo, j.descricao as fase, " . $comando_data_atual . " as data_atual, " . $comando_hora_atual . " as hora_atual, (select placar_time_A FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $user_id . ") as aposta_a, (select placar_time_B FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $user_id . ") as aposta_b, j.local, DATE_FORMAT(j.data, '%d/%m/%Y') AS data, j.hora, cam.descricao as campeonato, ta.img as img_a, tb.img as img_b, ta.nome as time_a, tb.nome as time_b "
                . "FROM tb_jogos j "
                . "INNER JOIN tb_time ta ON ta.id_time = j.id_time_A "
                . "INNER JOIN tb_time tb ON tb.id_time = j.id_time_B "
                . "INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato "
                . "WHERE j.id_campeonato = " . $id_campeonato . " AND j.id_rodada = " . $id_rodada . " ORDER BY j.data ASC, j.hora ASC ";
        if ($paginar) {
            $query.=" LIMIT " . $inicio . ", " . $registros;
        }
        $result = self::executaQueryAll($query);
        return $result;
    }

    function getCountProxJogosByUserByCampeonatoFiltroDataHora($id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada) {
        $query = "SELECT COUNT(j.id_jogo) as total FROM tb_jogos j "
                . "INNER JOIN tb_time ta ON ta.id_time = j.id_time_A "
                . "INNER JOIN tb_time tb ON tb.id_time = j.id_time_B "
                . "INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato "
                . "WHERE j.id_campeonato = " . $id_campeonato . " AND (j.data>" . $comando_data_atual . " OR (j.hora > " . $comando_hora_atual . " AND j.data = " . $comando_data_atual . ")) AND j.id_rodada = " . $id_rodada;
        $result = self::executaQueryRow($query);
        return $result['total'];
    }

    function getJogosDadosApostasByUserByCampeonatoFiltroDataHora($user_id, $id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada, $paginar = false, $inicio = 0, $registros = 10) {
        $query = "SELECT j.id_jogo, j.descricao as fase, (select placar_time_A FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $user_id . ") as aposta_a, (select placar_time_B FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $user_id . ") as aposta_b, j.local, DATE_FORMAT(j.data, '%d/%m/%Y') AS data, j.hora, cam.descricao as campeonato, ta.img as img_a, tb.img as img_b, ta.nome as time_a, tb.nome as time_b "
                . "FROM tb_jogos j "
                . "INNER JOIN tb_time ta ON ta.id_time = j.id_time_A "
                . "INNER JOIN tb_time tb ON tb.id_time = j.id_time_B "
                . "INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato "
                . "WHERE j.id_campeonato = " . $id_campeonato . " AND (j.data>" . $comando_data_atual . " OR (j.hora > " . $comando_hora_atual . " AND j.data = " . $comando_data_atual . ")) AND j.id_rodada = " . $id_rodada . " ORDER BY j.data ASC, j.hora ASC ";
        if ($paginar) {
            $query.=" LIMIT " . $inicio . ", " . $registros;
        }
        $result = self::executaQueryAll($query);
        return $result;
    }

    function getCountApostas($id_usuario, $id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada) {
        $query = "SELECT COUNT(j.id_jogo) as total, (select placar_time_A FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $id_usuario . ") as aposta_a, (select placar_time_B FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $id_usuario . ") as aposta_b FROM tb_jogos j
INNER JOIN tb_time ta ON ta.id_time = j.id_time_A
INNER JOIN tb_time tb ON tb.id_time = j.id_time_B
INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato
WHERE j.id_campeonato = " . $id_campeonato . " AND (j.data<" . $comando_data_atual . " OR (j.hora < " . $comando_hora_atual . " AND j.data<=" . $comando_data_atual . ")) AND j.id_rodada = " . $id_rodada;

        $result = self::executaQueryRow($query);
        return $result['total'];
    }

    function getCountApostasFeitas($id_usuario, $id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada) {
        $query = "SELECT COUNT(j.id_jogo) as total, (select placar_time_A FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $id_usuario . ") as aposta_a, (select placar_time_B FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $id_usuario . ") as aposta_b FROM tb_jogos j
INNER JOIN tb_time ta ON ta.id_time = j.id_time_A
INNER JOIN tb_time tb ON tb.id_time = j.id_time_B
INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato
WHERE j.id_campeonato = " . $id_campeonato . " AND (j.data<" . $comando_data_atual . " OR (j.hora < " . $comando_hora_atual . " AND j.data<=" . $comando_data_atual . ")) AND j.id_rodada = " . $id_rodada . " HAVING (aposta_a IS NOT NULL AND aposta_b IS NOT NULL)";

        $result = self::executaQueryRow($query);
        return $result['total'];
    }

    function getApostas($id_usuario, $id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada, $paginar = false, $inicio = 0, $registros = 10) {
        $query = "SELECT j.id_jogo, j.local, DATE_FORMAT(j.data, '%d/%m/%Y') AS data, j.hora, j.placar_time_A as placar_a, j.placar_time_B as placar_b, cam.descricao as campeonato, ta.img as img_a, tb.img as img_b, ta.nome as time_a, tb.nome as time_b,
 (select placar_time_A FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $id_usuario . ") as aposta_a, (select placar_time_B FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $id_usuario . ") as aposta_b,
 (select p.pontos FROM tb_apostas a INNER JOIN tb_pontuacao p ON p.id_aposta = a.id_aposta WHERE p.id_usuario = " . $id_usuario . " AND a.id_jogo = j.id_jogo) as pontos, j.obs_placar, j.status
FROM tb_jogos j
INNER JOIN tb_time ta ON ta.id_time = j.id_time_A
INNER JOIN tb_time tb ON tb.id_time = j.id_time_B
INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato
WHERE j.id_campeonato = " . $id_campeonato . " AND (j.data<" . $comando_data_atual . " OR (j.hora < " . $comando_hora_atual . " AND j.data<=" . $comando_data_atual . ")) AND j.id_rodada = " . $id_rodada . " ORDER BY data DESC";
        if ($paginar) {
            $query.=" LIMIT " . $inicio . ", " . $registros;
        }
        $result = self::executaQueryAll($query);
        return $result;
    }

    function getApostasFeitas($id_usuario, $id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada, $paginar = false, $inicio = 0, $registros = 10) {
        $query = "SELECT j.id_jogo, j.local, DATE_FORMAT(j.data, '%d/%m/%Y') AS data, j.hora, j.placar_time_A as placar_a, j.placar_time_B as placar_b, cam.descricao as campeonato, ta.img as img_a, tb.img as img_b, ta.nome as time_a, tb.nome as time_b,
 (select placar_time_A FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $id_usuario . ") as aposta_a, (select placar_time_B FROM tb_apostas WHERE id_jogo = j.id_jogo AND id_usuario = " . $id_usuario . ") as aposta_b,
 (select p.pontos FROM tb_apostas a INNER JOIN tb_pontuacao p ON p.id_aposta = a.id_aposta WHERE p.id_usuario = " . $id_usuario . " AND a.id_jogo = j.id_jogo) as pontos, j.obs_placar, j.status
FROM tb_jogos j
INNER JOIN tb_time ta ON ta.id_time = j.id_time_A
INNER JOIN tb_time tb ON tb.id_time = j.id_time_B
INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato
WHERE j.id_campeonato = " . $id_campeonato . " AND (j.data<" . $comando_data_atual . " OR (j.hora < " . $comando_hora_atual . " AND j.data<=" . $comando_data_atual . ")) AND j.id_rodada = " . $id_rodada . " HAVING (aposta_a IS NOT NULL AND aposta_b IS NOT NULL) ORDER BY data DESC";
        if ($paginar) {
            $query.=" LIMIT " . $inicio . ", " . $registros;
        }
        $result = self::executaQueryAll($query);
        return $result;
    }

    function getDadosAmigoCountPontosByUsuarioByCampeonato($id_usuario, $id_campeonato) {
        $query = "SELECT SUM(p.pontos) as total, usu.nome, usu.id_user_facebook FROM tb_pontuacao p
INNER JOIN tb_usuario usu ON usu.id_usuario = p.id_usuario
INNER JOIN tb_apostas a ON a.id_aposta = p.id_aposta
INNER JOIN tb_jogos j ON j.id_jogo = a.id_jogo
INNER JOIN tb_campeonato c ON c.id_campeonato = j.id_campeonato WHERE c.id_campeonato = " . $id_campeonato . " AND usu.id_usuario = " . $id_usuario;
        $result = self::executaQueryRow($query);
        return $result;
    }

    function getCountPontosByUsuarioByCampeonato($id_usuario, $id_campeonato) {
        $query = "SELECT SUM(p.pontos) as total FROM tb_pontuacao p
INNER JOIN tb_usuario usu ON usu.id_usuario = p.id_usuario
INNER JOIN tb_apostas a ON a.id_aposta = p.id_aposta
INNER JOIN tb_jogos j ON j.id_jogo = a.id_jogo
INNER JOIN tb_campeonato c ON c.id_campeonato = j.id_campeonato WHERE c.id_campeonato = " . $id_campeonato . " AND usu.id_usuario = " . $id_usuario;
        $result = self::executaQueryRow($query);
        return $result;
    }

    function getResultadosJogos($id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada, $paginar = false, $inicio = 0, $registros = 10) {
        $query = "SELECT j.id_jogo, j.local, DATE_FORMAT(j.data, '%d/%m/%Y') AS data, j.hora, j.placar_time_A as placar_a, j.placar_time_B as placar_b, cam.descricao as campeonato,
 ta.img as img_a, tb.img as img_b, ta.nome as time_a, tb.nome as time_b, j.obs_placar, j.status
FROM tb_jogos j
INNER JOIN tb_time ta ON ta.id_time = j.id_time_A
INNER JOIN tb_time tb ON tb.id_time = j.id_time_B
INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato
WHERE j.id_campeonato = " . $id_campeonato . " AND (j.data<" . $comando_data_atual . " OR (j.hora < " . $comando_hora_atual . " AND j.data<=" . $comando_data_atual . ")) AND j.id_rodada = " . $id_rodada . " ORDER BY data DESC";
        if ($paginar) {
            $query.=" LIMIT " . $inicio . ", " . $registros;
        }
        $result = self::executaQueryAll($query);
        return $result;
    }

    function getCountResultadosJogos($id_campeonato, $comando_hora_atual, $comando_data_atual, $id_rodada) {
        $query = "SELECT COUNT(j.id_jogo) as total FROM tb_jogos j
INNER JOIN tb_time ta ON ta.id_time = j.id_time_A
INNER JOIN tb_time tb ON tb.id_time = j.id_time_B
INNER JOIN tb_campeonato cam ON cam.id_campeonato = j.id_campeonato
WHERE j.id_campeonato = " . $id_campeonato . " AND (j.data<" . $comando_data_atual . " OR (j.hora < " . $comando_hora_atual . " AND j.data<=" . $comando_data_atual . ")) AND j.id_rodada = " . $id_rodada;
        $result = self::executaQueryRow($query);
        return $result['total'];
    }

    function getRodadasByCampeonatos($id_campeonato) {
        $query = "SELECT r.id_rodada FROM tb_rodada r
INNER JOIN tb_fase f ON f.id_fase = r.id_fase
INNER JOIN tb_campeonato c ON c.id_campeonato = f.id_campeonato
INNER JOIN tb_jogos j ON j.id_campeonato = c.id_campeonato and r.id_rodada = j.id_rodada
WHERE f.id_campeonato = " . $id_campeonato . " GROUP BY r.id_rodada";
        $result = self::executaQueryAll($query);
        return $result;
    }

    function getRodadasByCampeonatosJogosConcluidos($id_campeonato, $comando_hora_atual, $comando_data_atual) {
        $query = "SELECT r.id_rodada FROM tb_rodada r
INNER JOIN tb_fase f ON f.id_fase = r.id_fase
INNER JOIN tb_campeonato c ON c.id_campeonato = f.id_campeonato
INNER JOIN tb_jogos j ON j.id_campeonato = c.id_campeonato and r.id_rodada = j.id_rodada
WHERE f.id_campeonato = " . $id_campeonato . " AND (j.data<" . $comando_data_atual . " OR (j.hora < " . $comando_hora_atual . " AND j.data<=" . $comando_data_atual . ")) GROUP BY r.id_rodada";
        $result = self::executaQueryAll($query);
        return $result;
    }

    function getRodadasByCampeonatosJogosConcluidosProcessados($id_campeonato, $comando_hora_atual, $comando_data_atual) {
        $query = "SELECT r.id_rodada FROM tb_rodada r
INNER JOIN tb_fase f ON f.id_fase = r.id_fase
INNER JOIN tb_campeonato c ON c.id_campeonato = f.id_campeonato
INNER JOIN tb_jogos j ON j.id_campeonato = c.id_campeonato and r.id_rodada = j.id_rodada
WHERE f.id_campeonato = " . $id_campeonato . " AND (j.data<" . $comando_data_atual . " OR (j.hora < " . $comando_hora_atual . " AND j.data<=" . $comando_data_atual . ")) AND j.status = 'F' GROUP BY r.id_rodada";
        $result = self::executaQueryAll($query);
        return $result;
    }

    function getDescricaoRodadaById($id_rodada) {
        $query = "SELECT descricao FROM tb_rodada WHERE id_rodada = " . $id_rodada;
        $result = self::executaQueryRow($query);
        return $result['descricao'];
    }

}
